\section{M\'etodos}

% formulaciones matematicas, detalles algoritmos y descripcion de datos
%para cada algoritmo 
%- descripcion
%- formula
%- dificultades algoritmicas

\subsection{Filtro Gaussiano}

El suavizado guassiano es el resultado de suavizar una imagen 
aplic\'andole una funci\'on gaussiana.
Reduce el ruido y el detalle de una imagen.
Se suele usar como una etapa de pre procesamiento para ignorar ciertos
detalles (se suaviza la imagen y despu\'es es m\'as simple separar
las distintas componentes que existan).

\vspace*{0.3cm}

Se convoluciona la imagen con una kernel de una funci\'on gaussiana.


\subsubsection{Algoritmos}

Dado $\sigma$, se toma una ventana de tamaño $6 \, \sigma + 1$, esto es
$3 \, \sigma$ para cada lado. Dado que en una distribuci\'on normal, 
los valores que est\'an m\'as alejados que $3 \, \sigma$ de la media
son despreciables, s\'olo es necesario tener en cuenta los valores
que est\'an dentro de este rango.

\vspace*{0.3cm}

La matr\'iz se llena con los valores correspondientes a la 
distribuci\'on normal centrada en el medio. El medio de la matr\'iz
tendr\'a valor $1$, y para el resto, los valores depender\'an de la
distancia a este centro (donde se toma como distancia la norma
euclideana entre los dos puntos).

\vspace*{0.3cm}

Entonces, para cada posici\'on $(x, y, z)$ de la matr\'iz $M$,

$$ d = \mathrm{norma\_euclideana}((x, y, z), 
(3 \, \sigma, 3 \, \sigma, 3 \, \sigma))$$

%donde $mid = 3 \, \sigma$.

%$$ M(x, y, z) = \displaystyle \frac{1}{2 \pi \sigma^2} \varepsilon ^ 
%{- \displaystyle \frac{x^2 + y^2 + z^2}{2 \sigma^2}} $$
$$ M(x, y, z) = \mathrm{probabilidad\_normal}(d, 0, \sigma) = 
\displaystyle \frac{1}{2 \pi \sigma^2} \varepsilon ^ 
{- \displaystyle \frac{d^2}{2 \sigma^2}} $$

Tanto para la norma eucl\'idea como para el c\'alculo del valor de
la funci\'on de densidad de probabilidad de la normal, se utilizaron
librer\'ias. Para el primer caso se us\'o la funci\'on
\texttt{scipy.spatial.distance.euclidean}
y para el segundo
\texttt{scipy.stats.norm.normpdf}.

\vspace*{0.3cm}

Como la matr\'iz correspondiente a la ventana para la normal no depende
de los valores de la imagen, se calcula una sola vez al iniciarse el
algoritmo del filtro gaussiano.

\vspace*{0.3cm}

Luego, para cada posici\'on de la imagen se convoluciona una 
submatr\'iz de la imagen del mismo tamaño que la ventana con la matr\'iz
correspondiente a la ventana. Es decir, se multiplican los elementos
posici\'on por posici\'on y se suman.

\vspace*{0.3cm}

Los valores que no pueden ser procesados quedan igual. Estos son los
valores correspondientes a los bordes de la imagen, los que est\'an 
a una distancia menor a la mitad del tamaño de la ventana, del borde
de la imagen (no se puede extraer una submatr\'iz del tamaño de la
ventana en estos casos).
Una opci\'on diferente hubiera sido considerar como 0 los valores que 
no se pueden conseguir (los que estar\'ian m\'as all\'a de los bordes).


\subsection{Filtro Bilateral}
Este filtro suaviza im\'agenes preservando los bordes (no se pierden
en el suavizado).
Usa una combinaci\'on lineal de valores de la imagen cercanos.

\vspace*{0.3cm}

Caracter\'isticas del m\'etodo

\begin{itemize}
    \item
        no iterativo
    \item
        local
\end{itemize}

Es un m\'etodo dentro de todo simple.

\vspace*{0.3cm}

Se combinan los niveles de gris (o los colores seg\'un corresponda)
bas\'andose tanto en la cercan\'ia geom\'etrica como en la similaridad
de tonos. 
Se prefieren los valores cercanos a los lejanos, tanto en el dominio
como en el rango.

\vspace*{0.3cm}

Tampoco se producen los denominados ``colores fantasma'' alrededor
de los bordes (como s\'i se producen con otros filtros).

\subsubsection{Algoritmos}

Para este filtro se necesitan dos valores de $\sigma$, el primero ser\'a
para computar la ventana con los valores de la gaussiana al igual que
en el filtro anterior, y el segundo para otra ventana particular para
este filtro.

\vspace*{0.3cm}

Esta segunda ventana contiene tambi\'en los valores de una 
distribuci\'on gaussiana, pero en este caso no depende de las distancias
sino de la diferencia entre las intensidades en un entorno.
Es decir, que se tienen en cuenta los valores de la imagen.
La distancia en este caso ser\'a entre las intensidades.

\vspace*{0.3cm}

Para cada posici\'on que pueda ser procesada, se calcula esta segunda
ventana. Luego, se multiplica elemento a elemento la primera ventana
con la segunda, obteniendo una nueva vetana bilateral.
Luego se convoluciona usando esta ventana bilateral como en el filtro
anterior.


\subsection{Segmentaci\'on (m\'etodo de Otsu)}

Este m\'etodo se usa para hacer umbralado autom\'atico basado en 
histogramas.
Se supone que la imagen contiene dos clases de p\'ixeles (fondo y no 
fondo), y se calcula el umbral \'optimo para separar estas dos clases,
donde por \'optimo se entiende aquel que hace que la varianza intra
clase sea m\'inima.

\vspace*{0.3cm}
\newpage

La varianza intra clase es la diferencia que existe entre los valores
de una misma clase, si son todos parecidos, entonces intuitivamente es
correcto que todos correspondan a la misma clase.

\vspace*{0.3cm}

Se busca minimizar la varianza intra clase, definida como la suma de las varianzas de las dos clases

$$ \displaystyle \sigma^2_w (t) = \omega_1 \sigma^2_1 (t) + \omega_2 \sigma^2_2 (t)$$

donde los $\omega_i$ son las probabilidades de las dos clases separadas
por un umbral $t$, y los $\sigma^2_i$ son las varianzas de cada clase.

\vspace*{0.3cm}

Otsu demuestra que minimizar la varianza intra clase es lo mismo que
maximizar la varianza entre clases.

$$ \displaystyle \sigma^2_b (t) = (\omega_1 \omega_2 ) (\mu_1 - \mu_2) ** 2 $$

\vspace*{0.3cm}

Intuitivamente eso quiere decir que se busca que las dos clases est\'en
lo m\'as separadas posibles.

\subsubsection{Algoritmos}

Primero, se obtiene un histograma hist con las distribuciones de las
intensidades. El histograma es un vector con valores de probabilidad.

\vspace*{0.3cm}

Luego, se calculan los $\omega_i$ y $\mu_i$ iniciales.

$$\omega_1 = \frac{hist[0]} {max\_intensity}$$
$$\omega_2 = 1 - \omega_1$$
$$\mu_1 = 0 = 0 * hist[0]$$
$$\mu_2 = \frac{(\mu_t - \mu_1)} {\omega_2}$$
$$max\_val = 0$$
$$k = 0$$

donde max\_intensity es el m\'aximo valor de intensidad, que
depender\'a de la imagen, y
$$\mu_t = \displaystyle \sum^{max\_intensity}_{i = 0} i * hist[i]$$

\vspace*{0.3cm}

Para cada valor $i$ de intensidad posible, se actualizan los
valores de $\omega$ y $\mu$

$$\omega_1 = \omega_1 + \frac{hist[i]} {max\_intensity}$$
$$\omega_2 = 1 - \omega_1$$
$$\mu_1 = \mu_1 +  hist[i] * i$$
$$\mu_2 = \frac{(\mu_t - \mu_1)} {\omega_2}$$

Se computa el valor de la varianza entre clases

$$\sigma^2_b = (\omega_1 * \omega_2) * {(\mu_2 - \mu_1)}^2$$

Y se actualiza el m\'aximo, teniendo en cuenta de actualizar tambi\'en
el valor de k que maximiza el valor

$$max\_val = \max(max\_val, \sigma^2_b)$$

Si se actualiz\'o el m\'aximo, $k = i$, si no queda igual.

\vspace*{0.3cm}

Finalmente, una vez obtenido el $k$, se umbraliza la imagen. 
Para cada voxel, si su intensidad es menor o igual a $k$, 
quedar\'a con color blanco y si no con color negro.


\subsection{Datos utilizados}

Inicialmente se carga como dato las im\'agenes 3d de cerebros
provistas, y se trabaja con cortes 2d, en particular con
el que tiene la tercera coordenada z igual a 50.

\vspace*{0.3cm}

Los algoritmos tambi\'en reciben este valor z como par\'ametros para
acelerar el procesamiento, siempre se termina trabajando en 2d.
